package Chapter5;

import java.util.Vector;

//111页程序5.6 在Vector中添加不同类型的元素
public class MyVector extends Vector<Object> {
    //创建MyVector类，继承自已有的Vector，表示继承Vector的模板，在其基础上进行修改。则Vector是父类，MyVector是子类。
    //新版本要加<Object>，否则会出不影响运行的警告。请指明Vector容器的位置和可能包含的内容，<Object>即祖先类下所有可能的内容。
    public MyVector() { //使用父类Vector默认的构造方法
        super(1, 1); //super表示使用父类Vector的构造方法，初始容量1，每次增量1
    }

    public void addInt(int i) { //在Vector中增加int型对象的构造方法
        addElement(i); //Java9之后抛弃包装类创建对象的方法，此处采用自动装箱的方式，以下同理
        //或者使用addElement(Integer.valueOf(i));以下同理
    }

    public void addFloat(float f) { //在Vector中增加float型对象的构造方法
        addElement(f);
    }

    public void addString(String s) { //在Vector中增加字符串对象的构造方法 注：字符串本身就是对象
        addElement(s);
    }

    public void addCharArray(char[] a) { //在Vector中增加字符数组对象的构造方法 注：字符数组本身就是对象
        addElement(a);
    }

    public void addDouble(double d) { //在Vector中增加字符数组对象的构造方法 注：字符数组本身就是对象
        addElement(d);
    }

    public void printVector() { //打印这个向量
        Object o; //将需要打印的所有元素存放此处，但需要toString转换为字符串
        int length = size(); //由于MyVector继承了Vector的所有内容，因此可以使用size(),size表示Vector向量的大小，即存储的元素个数。因为Vector相当于元素的集合，因此是以每个元素为单位。
        System.out.println("Vector元素的添加数量为：" + length);
        for (int i = 0; i < length; i++) { //每调用printVector方法，循环一次i，元素的个数也会改变
            o = elementAt(i); //将第i个元素赋值给o
            if (o instanceof char[]) { //判断对象o是否为字符数组，对应addCharArray方法，如果为true说明o已经是字符数组
                System.out.println(String.copyValueOf((char[]) o)); //因此要将字符数组的每个字符拷贝出来，且要强制转换为字符数组
            } else System.out.println(o.toString()); //如果不是字符数组，将它们转为字符串
        }
    }

    public static void main(String[] args) {
        MyVector v = new MyVector(); //此次不用写泛型<Object>是因为继承时就已经添加过
        int digit = 5;
        float real = 3.14f;
        String s = "Hi 这里！";
        char[] letters = {'a', 'b', 'c', 'd'};
        double dob = 0.35;

        v.addInt(digit);
        v.addFloat(real);
        v.addString(s);
        v.addCharArray(letters);
        v.addDouble(dob);
        v.printVector(); //调用printVector()方法，功能是将元素转为字符串，并打印所有的元素
    }
}
